"""
图片格式配置文件
用于集中管理所有支持的图片格式及其分类信息
"""

# Pillow支持的所有格式（完整版本）
SUPPORTED_FORMATS = {
    # ===== 主流常用格式 =====
    'avif': 'AVIF',         # 现代图像格式，支持动画序列
    'bmp': 'BMP',           # Windows位图格式
    'dib': 'DIB',           # 设备无关位图
    'gif': 'GIF',           # GIF格式，支持动画
    'ico': 'ICO',           # Windows图标格式
    'icns': 'ICNS',         # macOS图标格式
    'jpeg': 'JPEG',         # JPEG格式
    'jpg': 'JPEG',          # JPEG格式（常用扩展名）
    'jpe': 'JPEG',          # JPEG格式（另一个扩展名）
    'jp2': 'JPEG2000',      # JPEG 2000格式
    'jpx': 'JPEG2000',      # JPEG 2000扩展格式
    'j2k': 'JPEG2000',      # JPEG 2000代码流格式
    'png': 'PNG',           # PNG格式
    'apng': 'PNG',          # 动画PNG格式
    'tif': 'TIFF',          # TIFF格式
    'tiff': 'TIFF',         # TIFF格式（完整扩展名）
    'webp': 'WEBP',         # WebP格式，支持动画
    
    # ===== 游戏和3D纹理格式 =====
    'blp': 'BLP',           # 暴雪Mipmap格式（魔兽世界纹理）
    'dds': 'DDS',           # DirectX纹理格式
    'ftex': 'FTEX',         # 3D游戏纹理格式
    'wal': 'WAL',           # Quake2纹理格式
    
    # ===== 传统PC格式 =====
    'eps': 'EPS',           # 封装PostScript格式
    'im': 'IM',             # LabEye图像格式
    'msp': 'MSP',           # Windows画图格式
    'pcx': 'PCX',           # PC画笔格式
    'xbm': 'XBM',           # X11位图格式
    'xpm': 'XPM',           # X像素图格式
    
    # ===== Netpbm格式族 =====
    'pbm': 'PBM',           # 便携式位图
    'pgm': 'PGM',           # 便携式灰度图
    'ppm': 'PPM',           # 便携式像素图
    'pnm': 'PNM',           # Netpbm通用格式
    
    # ===== 专业软件格式 =====
    'psd': 'PSD',           # Adobe Photoshop格式
    'gbr': 'GBR',           # GIMP画笔文件
    'mic': 'MIC',           # Microsoft图像编辑器格式
    'fpx': 'FPX',           # Kodak FlashPix格式
    'pcd': 'PCD',           # Kodak PhotoCD格式
    'imt': 'IMT',           # Image Tools格式
    
    # ===== 科学和医学图像格式 =====
    'fits': 'FITS',         # 天文学灵活图像传输系统
    'spider': 'SPIDER',     # 电子显微镜图像格式
    'pfm': 'PFM',           # 便携式浮点图格式
    
    # ===== 动画和序列格式 =====
    'fli': 'FLI',           # Autodesk FLI动画
    'flc': 'FLC',           # Autodesk FLC动画
    'mpo': 'MPO',           # 多图片对象格式
    'dcx': 'DCX',           # Intel PCX容器格式
    
    # ===== 系统和特殊格式 =====
    'cur': 'CUR',           # Windows光标格式
    'wmf': 'WMF',           # Windows图元文件
    'emf': 'EMF',           # 增强图元文件
    'sgi': 'SGI',           # Silicon Graphics图像格式
    'sun': 'SUN',           # Sun光栅格式
    'pixar': 'PIXAR',       # Pixar光栅文件
    'tga': 'TGA',           # Truevision TGA格式
    'gd': 'GD',             # libgd格式
    'qoi': 'QOI',           # Quite OK Image格式
    
    # ===== 新闻和档案格式 =====
    'iptc': 'IPTC',         # IPTC/NAA新闻图片格式
    'naa': 'IPTC',          # NAA新闻图片格式
    'mcidas': 'MCIDAS',     # McIdas区域文件
    
    # ===== 输出专用格式 =====
    'palm': 'PALM',         # Palm像素图格式（只写）
    'pdf': 'PDF',           # Adobe PDF格式（只写）
    
    # ===== 仅识别格式（需要自定义处理器）=====
    'bufr': 'BUFR',         # 二进制通用格式
    'grib': 'GRIB',         # 网格化二进制格式
    'hdf5': 'HDF5',         # 分层数据格式
    'h5': 'HDF5',           # HDF5格式（另一个扩展名）
    'mpeg': 'MPEG',         # MPEG格式（仅识别）
    'mpg': 'MPEG',          # MPEG格式（另一个扩展名）
}

# 按功能分类的格式字典
FORMATS_BY_CATEGORY = {
    '常用格式': {
        'avif': 'AVIF - 现代高效格式',
        'bmp': 'BMP - Windows位图',
        'gif': 'GIF - 动画支持',
        'jpg': 'JPEG - 照片压缩',
        'png': 'PNG - 无损压缩',
        'webp': 'WEBP - Google格式',
        'tiff': 'TIFF - 专业印刷'
    },
    '游戏开发': {
        'dds': 'DDS - DirectX纹理',
        'blp': 'BLP - 暴雪游戏纹理',
        'ftex': 'FTEX - 3D游戏纹理',
        'wal': 'WAL - Quake2纹理'
    },
    '专业软件': {
        'psd': 'PSD - Photoshop文件',
        'eps': 'EPS - 矢量图形',
        'ico': 'ICO - 图标文件',
        'tga': 'TGA - Truevision格式'
    },
    '科学图像': {
        'fits': 'FITS - 天文数据',
        'spider': 'SPIDER - 电子显微镜',
        'pfm': 'PFM - 浮点图像'
    },
    '传统格式': {
        'pcx': 'PCX - 早期PC格式',
        'xbm': 'XBM - X11位图',
        'xpm': 'XPM - X11像素图',
        'sgi': 'SGI - Silicon Graphics'
    },
    '文档格式': {
        'pdf': 'PDF - 便携文档格式'
    }
}

# 读写能力分类
READ_WRITE_CAPABILITY = {
    '完全支持': ['AVIF', 'BMP', 'DIB', 'GIF', 'ICO', 'ICNS', 'JPEG', 'JPEG2000', 'PNG', 'TIFF', 'WEBP', 
                'BLP', 'DDS', 'EPS', 'IM', 'MSP', 'PCX', 'PBM', 'PGM', 'PPM', 'PNM', 'SGI', 'SPIDER', 
                'TGA', 'XBM', 'PFM', 'MPO'],
    '只读格式': ['CUR', 'DCX', 'FITS', 'FLI', 'FLC', 'FPX', 'FTEX', 'GBR', 'GD', 'IMT', 'IPTC', 
                'MCIDAS', 'MIC', 'PCD', 'PIXAR', 'PSD', 'QOI', 'SUN', 'WAL', 'WMF', 'EMF', 'XPM'],
    '只写格式': ['PALM', 'PDF'],
    '仅识别': ['BUFR', 'GRIB', 'HDF5', 'MPEG']
}

# 获取所有支持的格式
def get_all_formats():
    """获取所有支持的格式列表"""
    return list(SUPPORTED_FORMATS.keys())

# 获取格式分类
def get_format_categories():
    """获取所有格式分类"""
    return list(FORMATS_BY_CATEGORY.keys())

# 根据分类获取格式
def get_formats_by_category(category):
    """
    根据分类获取对应的格式
    :param category: 分类名称
    :return: 该分类下的格式字典，不存在时返回空字典
    """
    return FORMATS_BY_CATEGORY.get(category, {})

# 获取格式的读写能力
def get_format_capability(format_name):
    """
    获取指定格式的读写能力
    :param format_name: 格式名称
    :return: 读写能力描述字符串
    """
    format_name = format_name.upper()
    
    for capability, formats in READ_WRITE_CAPABILITY.items():
        if format_name in formats:
            return capability
    
    return '未知'

# 获取格式的完整名称
def get_format_full_name(format_key):
    """
    根据格式键获取完整格式名称
    :param format_key: 格式键名（小写）
    :return: 完整格式名称
    """
    return SUPPORTED_FORMATS.get(format_key.lower(), format_key.upper())